package com.backend.system.beans.user;

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.DesensitizedUtil;
import com.backend.system.common.enums.SexEnum;
import com.backend.system.dao.entity.User;
import com.backend.system.util.StringUtil;
import com.backend.system.util.TimeUtil;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Objects;

/**
 * 用户查询vo
 *
 * @author backend-manage
 */
@Data
@ApiModel
public class UserQueryVO implements Serializable {
    @Serial
    private static final long serialVersionUID = -9188480882367875826L;

    /**
     * 用户id
     */
    @ApiModelProperty("用户id")
    private Long id;

    /**
     * 用户名
     */
    @ApiModelProperty("用户名")
    private String username;

    /**
     * 登录账号
     */
    private String loginAccount;

    /**
     * 性别（男 1， 女 0）
     */
    @ApiModelProperty("性别（男 1， 女 0）")
    private Integer sex;

    /**
     * 性别（男/女）
     */
    @ApiModelProperty("性别（男/女）")
    private String sexStr;

    /**
     * 出生日期
     */
    @JsonFormat(pattern = TimeUtil.DEFAULT_DATE_PATTERN, timezone = TimeUtil.GMT_8)
    @ApiModelProperty("出生日期")
    private LocalDate birthday;

    /**
     * 电话
     */
    @ApiModelProperty("电话")
    private String phone;

    /**
     * 脱敏电话
     */
    @ApiModelProperty("脱敏电话")
    private String sensitizedPhone;

    /**
     * 创建时间
     */
    @JsonFormat(pattern = TimeUtil.DEFAULT_DATE_TIME_PATTERN, timezone = TimeUtil.GMT_8)
    @ApiModelProperty("创建时间")
    private LocalDateTime createTime;

    /**
     * 创建人用户名
     */
    @ApiModelProperty("创建人用户名")
    private String createUsername;

    public static UserQueryVO convert(User user) {
        UserQueryVO vo = new UserQueryVO();
        BeanUtil.copyProperties(user, vo, "sex");

        SexEnum sex = user.getSex();
        if (Objects.nonNull(sex)) {
            vo.setSex(sex.getCode());
            vo.setSexStr(sex.getDesc());
        }

        if (StringUtil.isNotBlank(user.getPhone())) {
            vo.setSensitizedPhone(DesensitizedUtil.mobilePhone(user.getPhone()));
        }
        return vo;
    }
}
